UNIX MAGAZINE 2002年6月号

キーフレーズ

UNIX MAGAZINE http:// 2002 Linux CPU www アドレス Windows RFC ネットワーク struct () インターフェイス Windows CE ページ プログラム システム セグメント 場合 ファイル Web アクセス 電子図書館 インターネット サーバー html データ 設定 for taxBean 000 本体価格 対応 可能 Protocol 処理 データリンク層 Transport addr バケット 実行 Network .com lnternet type 割込み HTTP useBean USB and ifp 利用 jsp Ethernet 近隣 情報 クライアント Microsoft tax 表示 写真 アプリケーション ips IPv6 プロトコル SCSI RAID HTML 必要 CPL LLINFO Extensions ソフトウェア Storage draft ディレクトリ usb CCCD レジスタ レベル DPL 機能 指定 ハンドラ ietf Emacs price オプション JSP Java コマンド ing telnetd マルチキャスト umask beanName 日本

目次

連載 163 ワークステーションのおと 坂下秀 表 1 Evo Desktop D500 US のおもな仕様 前回、秋葉原で ISDN の TA ( ターミナル・アタフ。タ ) CPU lntel CeIeron 1.3GHz とシリアルケープルを買おうとしたら、意外にも置いてい チッフ。セット lntel 815 E る店が少なかったと書きました。その後、これ以外にも、 メモリ ( 最大 ) 128MB ( 512MB ) 、 買おうとして、、ああんまりないんやなぁ " と気づいた 168 ピン DIMM/133MHz 、 DIMM スロット x 2 ものがありました。 1 つはパラレルポート付きのインクジ グラフィックス lntel Direct AGP (lntel 815E ェット・プリンタ、もう 1 つはフロッピー・ディスクです。 チップセットに内蔵 ) インクジェット・プリンタについては、低価格のものは HDD 40GB (Ultra ATA/IOO) CD-ROM ドライプ 最大 24 イ部 ( 着脱式 ) USB のみ、高級機は USB と IEEE1394 という製品構成 サウンド AC'97 サウンド・コントローラ * のメーカーか増えつつあるようです。、、パラレルポートぐ ネットワーク lntel P RO / 100 VM Network らい付いてるやろ " というのは、だんだん通しなくなるの Connection かもしれません。事実、不劫ワ。リンタを購入したときのお インターフェイス USB x 5 、 VGA 、サウンド、レ ガシー・モジュール用ポートなど まけも USB ケーフフレでした。店員さんに、「 USB ケープ サイズ (HxWxD) 31.5 >< 6.9 x 32.5cm 僻従置き日 ルは要らんから、パラレルケープルにしてくれへん ? 」と 約 5.3kg 言ったら、「そちらは〇階で売っております」とかわされ 最大消費電力 50 Ⅵー OS てしまいました。 Windows XP Professional 、 または フロッピー・ディスクも、目立たない場所にひっそりと Windows 2000 Professional 置いてありました。すぐ目につくところにあるのは CD ー R * オンポード や CD-RW などの CD 関連メディア、その次が DVD- R などの DVD 里メディア、そして MO があり、 su- perDisk などとともに、、最丘は使う人か誠りましたなぁ " という感じの棚でようやくフロッピー・ディスクを見つけ こんなことを書いていると、黽呂城に連れていかれそう です。そろそろ本題に入りましよう。 写真 1 刊 vo Desktop D500 US Evo Desktop D500 US 勤務先で、 Compaq の省スペース型デスクトップ pc 「 Evo Desktop D500 US 」 ( 写真 1 ) を購入しました。 そこで、いつものように内部がどのようになっているのか を見てみました。それでは・・ 、その前に仕様を簡単に紹 万円以下で買えるのですから、ひと昔前のことを思い出す 介しておきましよう俵 1 ) 。 と、、いったい、どないなってんねん " という気持ちになり CPU は Celeron 1.3GHz と十分に高速で、これが 10 ます。 UNIX MAGAZINE 2002.6 121

連載 / BSD をハックする一の callback と done のどちらで処理されているかが分 からないので、両方調べてみます。 xfer->callback は、 usbd-setup-xfer() 、 usbd-setup-default-xfer() などで 引数として渡された値を代入しています。 そこで ucom. c を調べると、 ucomstart() と ucom- startread() のなかで usbd-setup-xfer() か呼び出され ています。今回はデータ受信の処理に興未があるので、デ ータ送信用の ucomstart() ではなく ucomstartread() をヾたところ、 usbd-setup-xfer() の該当する引数に渡 しているのは ucomreadcb() でした。 一方、 pipe->methods->done はどうでしよう。 uhci . c のなかの struct usbd-pipe-methods を探したとこ ろ、 uhci-root-ctrl-methods という変数があり、これの done は uhci-root-ctrl-done にネノ琪月化されています。 れを調べると、次のようにまったく空つほ。の関数です。 void uhci—root—ctrl—done (usbd—xfer—handle xfer) これで、 ucomreadcb() について調べれはよいことが 分かったので詳しく読んでみます。おおよそ次のような処 理がおこなわれています。 int (*rint) (int c, struct tty *tp) tp—>t—linesw—>l—rint ; usbd—get—xfer—status (xfer , NULL , (void (*)&cp, &cc, NULL); if (sc—>sc—methods—>ucom—read ! = NULL) sc—>sc_methods—>ucom_read(sc—>sc—parent , sc—>sc—portno, &cp, &cc) ; while (cc— if ((*rint) (*cp + + , tp) sc->sc-methods の型は struct ucom-methods なの で、 grep で才す - と umct. c 、 uplcom. c 、 umodem. c など でこの型の構造体の初期値か定義されています。 uplcom ・ c を調べてみると、 ucom-read フィールドは NULL な ので、 sc->sc-methods->ucom-read の呼出しは発生し ないことが分かります。 tty 里のデバイスドライバでは cc がデータバイト数 カウンタであることが多いのですが、ここでもそうなって いるようです。受信したデータは、 1 バイトすっ *rint() すなわち tp->t 」 inesw->l-rint に渡しています。 120 この tp は struct tty * なので、 t-linesw はラインス イッチへのポインタ (struct linesw * ) です。ラインス イッチ (line switch) は USB シリアルにかぎらす、す べての tty デバイスに共通の処理関数へのポインタ ( から なる構造体の配列 ) です。シリアルポートは、通常の tty ポート (/dev/ttyXX) として使うこともあれは、マウス や SLIP や PPP のために使用することもあります。 れら上位層の機能の切替えを司るのがラインスイッチであ り、ラインスイッチに登録されている処理モジュールを ライン・ディシプリン (line discipline : 線規則 ) と呼び ます。 1 ュⅲ t は、線規則のうちの受信した 1 文字を処理する 関数へのポインタかオ褓内されているフィールドで、通常は ttyinput() (kern/tty. c) になっています。 けっきよく、 ucomreadcb() 内の (*rint)(*cp 十十 , (p) で USB に依存する処理かり、 tty デバイス共通の 受信処理に受信データか渡されるわけです。 これで、受信処理の際に受信したデータを捨てて 1 バ イトを送信する処理を入れるところは、おそらく ucom- readcb() であることが分かりました。 こまできたところで、今回は時間切れとなってしまい ました。続きは次回に紹介します。 デバイスドライバの処理の流れを追いかけるのは大変で す。この連載ではこれまで、いろいろ調べて分かった結 果のみを示していましたが、今回はその過程を詳しく説明 してみました。いかにも大変そうで、やる気がそがれたで しようか ? それとも、カンや経験はなくても首に grep していけばなんとか追いかけられることが分かって、勇気 づけられたでしようか ? UNIX は C 言語で書かれているため、関数のポインタ を多用せざるをえす、見通しか悪くなっています。とはい え、 C だからこれだけ追いかけられるのであって、 C 十十 であればお手上げかもしれません。しかし逆に、 C 十十の ようなオプジェクト指向言語ならクラスプラウサなどの支 援ツールか充実しているので、かえって調べやすいとも考 えられます。実際はどうなのか、興未カヾ勇くところです。 ( さいとう・あきのり友大学 ) UNIX MAGAZINE 2002.6

連載 / BSD をハックする一の ASCII 好評発売中 ! ネットワーク・ テクノロジー ー己から、 usbd-bus という型だと分かります。これを grep で探してみると、 uhci. c にそれらしいものがみつか りました。 uchi-init() のなかに次のような行があります。 / * Set up the bus struct . * / sc—>sc—bus . methods = &uhci_bus_methods ; そこでさらに uhci-bus-methods の定義を探すと、同 しく uhci. c でみつかりました。 struct usbd—bus_methods uhci_bus_methods uhci —open , uhci softintr, Ⅱ五 ci ー P011 , uhci a110cm, uhci freem, uhci allocx, uhci freex, 製ー X ネットワーク - アクノロ。シー インターネットを支える技術・掲ロ第一 ・播ロ陽ー著 ・ A5 判、 448 ページ ・ ISBN 4-7561-4092-0 ・本体 3 , 500 円 + 税 技術の“心”が分かる本 ネットワーク技術者必携 ! 技術には、かならず核心となる部分があります。これ を理解しているかが、その技術を使いこなせるかどう かの分かれ目といえるでしよう。 本書では、現在のインターネットを支えるさまざまな 技術について、開発の背景から、原理、応用まで、 数多くの図版を用いて詳細に解説します。 目次から 1 章 Ethernet 2 章リピータ、ブリッジ、スイッチ 3 章ス / ヾニングッリー 4 章 VLAN 5 章経路制御の基礎 6 章経路検索アルゴリズム 7 章 ATM 8 章 UN レグナリング 9 章 LANE と MPOA 10 章アドレス変換ーー NAT と旧 masquerade 1 1 章 ADSL 参考文献 / 索引 / 英和用語対照表 株式会社アスキー ネットワーク技術者必 インターネットを - する E 置澄 1 滝 t 、一、 A ′、興ロ望 . 、 NAT などのについて、その つまり、 uhci-softintr() を調べればよいわけです。 れは次のような処理をしています。 for ()i = LIST—FIRST(&sc—>sc_intrhead) ; ii ; ii = LIST_NEXT(ii, list)) uhci—check—intr(sc, (i) ; uhci-check-intr() を調べると、エラー処理のはかに は 以下の処理をしているだけです。 usb—uncallout (ii—>xfer—>timeout_handle , uhci—timeout , (i) ; uhci—idone(ii) ; 上の uncallout は、どうもタイムアウトのためのタイ マーをキャンセルしているもののようです。そこで uhci- idone() を調べることにします。これもエラー処理などが 多いのですが、けっきよく転送が正常終了しているとき には、 usb—transfer—complete(xfer) ; を呼び出して終了しています。 usb-transfer-complete() は、 usbdi. c で定義されて いる関数です。この関数では、バッフア領域の割付けやデ ータのバイト数言 t 算、コピーなどがおこなわれています。 そして、最後に次のような処理をしています。 if (xfer—>callback) xfer—>callback(xfer , xfer—>priv , xfer—>status) ; pipe—>methods->done (xfer) ; 〒 1 5 ト 8024 東京都渋谷区代々木 4 ー 33 ー 1 0 出版営業部 電話 (03) 5351 ー 8194 119 UNIX MAGAZINE 2002.6